package cn.tedu.eb_film.redis.buildCache;


import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


// QuartzConfig用于绑定Job和Trigger的触发关系
// 这个触发实际上会由Scheduler来调度,但是这个对象已经被SpringBoot管理了
// 我们只需要编写将JobDetail和Trigger对象保存到Spring容器即可
@Configuration
public class QuartzConfig {
    // SpringBoot启动时,使用@Bean标记的方法,方法的返回值会保存到Spring容器中
    @Bean
    public JobDetail movie(){
        // JobDetail对象中配置要运行的Job实现类信息
        // JobBuilder.newJob就是关联Job实现类的方法
        return JobBuilder.newJob(MovieJob.class)
                // 给当前任务起名,多个任务名称不要重复
                .withIdentity("movie")
                // 在springBoot默认环境下,JobDetail对象如果没有触发器绑定,可能会被GC回收
                // 设置storeDurably()方法后,即使没有被绑定,也不会被回收
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger movieTrigger(){
        // 声明Cron表达式,确定这个触发的时间
        CronScheduleBuilder cron =
                CronScheduleBuilder.cronSchedule("0 0/5 * * * ?");
        return TriggerBuilder.newTrigger()
                // 设置要触发的JobDetail对象
                .forJob(movie())
                // 绑定cron表达式
                .withSchedule(cron)
                // 给当前触发器起名,不能重复
                .withIdentity("movieTrigger")
                .build();
    }

}
